Documentation

inbox/README from development resources.md

Dynaplex Development Resources

This directory contains development tooling and infrastructure—code that helps developers build the solution but is NOT runtime feature functionality.

What are Development Resources?

Development resources provide the tooling, automation, and infrastructure needed to develop, build, analyze, and scaffold the Acsis platform:

  • Dynaplex infrastructure: Core framework, service defaults, orchestration, source generators
  • Roslyn analyzers: Architecture enforcement and code quality rules
  • Compatibility shims: Legacy system compatibility layers
  • Project templates: Scaffolding for new components
  • Build scripts: MSBuild targets, CI/CD helpers

Namespace Convention

All development resources MUST use the Acsis.Dynaplex.* namespace.

This namespace serves as a strong signal that the project:

  • Is development-time tooling, NOT runtime functionality
  • May depend on EF Core, ASP.NET Core, Roslyn, MSBuild, etc.
  • Should NOT be referenced as a normal compile-time dependency by components (only as analyzers/build)
  • Lives in this directory (development/resources/)

Examples

Project Namespace
Core framework utilities Acsis.Dynaplex
Service defaults Acsis.Dynaplex.Strata.ServiceDefaults
Orchestration helpers Acsis.Dynaplex.Strata.Orchestration
Source generators Acsis.Dynaplex.Strata.SourceGenerators
Roslyn analyzers Acsis.Dynaplex.RoslynAnalyzers
EntLib compatibility Acsis.Dynaplex.EntLibCompatShim

Directory Structure

resources/
├── dynaplex/                     # Core Dynaplex framework
│   ├── src/
│   │   ├── Acsis.Dynaplex/
│   │   ├── Acsis.Dynaplex.Strata.ServiceDefaults/
│   │   ├── Acsis.Dynaplex.Strata.Orchestration/
│   │   └── Acsis.Dynaplex.Strata.SourceGenerators/
│   └── resources/
│       └── dplx-cli/
│
├── analyzers/                    # Roslyn analyzers
│   ├── src/
│   │   └── Acsis.Dynaplex.RoslynAnalyzers/
│   └── test/
│       └── Acsis.Dynaplex.RoslynAnalyzers.Tests/
│
├── ent-lib-compat-shim/          # Legacy compatibility
│   └── Acsis.Dynaplex.EntLibCompatShim/
│
├── project-templates/            # Component scaffolding templates
│   ├── Abstractions/
│   ├── Core/
│   ├── Database/
│   ├── ApiClient/
│   ├── DbMigrator/
│   ├── UnitTests/
│   └── IntegrationTests/
│
├── build/                        # Build infrastructure
│   └── ...
│
└── scripts/                      # Development scripts
    └── ...

What Development Resources Are NOT

Runtime libraries are NOT development resources. The following belong in libraries/ with the Acsis.Dynaplex.Strata.* namespace:

  • GS1/barcode encoding
  • Domain primitives (strongly-typed IDs, value objects)
  • Validation helpers
  • Runtime infrastructure abstractions (observability, resilience)

See Runtime Libraries for documentation.

Reference Rules

How Components Reference Development Tooling

Development tooling should be referenced differently than runtime dependencies:

<!-- Analyzers: Use PrivateAssets to prevent leaking into runtime -->
<ProjectReference Include="...\Acsis.Dynaplex.RoslynAnalyzers.csproj"
                  PrivateAssets="all"
                  IncludeAssets="analyzers" />

<!-- Build targets: Use buildtransitive -->
<ProjectReference Include="...\Acsis.Dynaplex.csproj"
                  PrivateAssets="all"
                  IncludeAssets="build;buildtransitive" />

Development Tooling CAN Reference

  • Any .NET libraries (EF Core, ASP.NET Core, Roslyn, MSBuild, etc.)
  • Other development tooling projects
  • BCL/System namespaces

Development Tooling Should NOT

  • Be referenced as a normal compile-time dependency by production services
  • Have its types appear in public APIs of components
  • Be included in runtime deployment artifacts (except as analyzers/build)

Creating New Development Tooling

  1. Place the project under the appropriate subdirectory in development/resources/
  2. Use the Acsis.Dynaplex.* namespace
  3. Update the analyzer whitelist if needed
  4. Document the purpose in this README

Documentation